/*
算法1-7~9 连续子序列最大和
分数 25
作者 陈越
单位 浙江大学

给定 n 个整数组成的序列 { a1​,a2​,⋯,an​ }，“连续子序列”被定义为 { ai​,ai+1​,⋯,aj​ }，其中 1≤i≤j≤n。“连续子序列最大和”则被定义为所有连续子序列元素的和中最大者。例如给定序列 { -2, 11, -4, 13, -5, -2 }，其连续子序列 { 11, -4, 13 } 有最大的和 20。请编写程序，计算给定整数序列的连续子序列最大和。

本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下：

    数据 0~6：测试基本正确性；
    数据 7：10^3 个随机整数；
    数据 8：10^4 个随机整数；
    数据 9：10^5 个随机整数。

输入格式:

输入第一行给出正整数 n (≤10^5)；第二行给出 n 个整数，绝对值均不超过 100，其间以空格分隔。
输出格式:

在第一行中输出连续子序列最大和，第二行输出该子序列首尾的数组下标（从 0 开始），以 1 个空格分隔。若解不唯一，则输出最小的数组下标（如样例所示）。
注意：如果序列中所有整数皆为零或负数，则取空子列的结果是最大的，为 0；此时空子序列数组首尾的下标均为 -1。 
输入样例:

10
-10 2 2 3 4 -5 -23 4 7 -21

输出样例:

11
1 4
*/

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int *a = new int[n];
    bool all_non_positive = true;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        if (a[i] > 0) {
            all_non_positive = false;
        }
    }
    if (all_non_positive) {
        cout << 0 << endl;
        cout << -1 << " " << -1 << endl;
        delete[] a;
        return 0;
    }
    int max_sum = 0, sum = 0;
    int start = 0, end = 0, temp_start = 0;
    for (int i = 0; i < n; i++) {
        sum += a[i];
        if (sum > max_sum) {
            max_sum = sum;
            start = temp_start;
            end = i;
        } else if (sum < 0) {
            sum = 0;
            temp_start = i + 1;
        }
    }
    cout << max_sum << endl;
    cout << start << " " << end << endl;
    delete[] a;
    return 0;
}